package com.myth;

import org.junit.Test;

import java.util.Date;
import java.util.Scanner;

/*
 * 一、java异常体系结构
 *
 * java.lang.Throwable
 * 		|----java.lang.Error:一般不编写针对性的代码进行处理
 * 		|----java.lang.Exception:可以进行异常处理
 * 			|----编译时异常(checked)
 * 				|----IOException
 * 					|----FileNotFoundException
 * 				|----ClassNotFoundException
 * 			|----运行时异常(unchecked)
 * 				|----NullPointerException（空指针异常）
 * 				|----ArrayIndexOutOfBoundsException（数组角标越界）
 * 				|----ClassCaseException（类型转换异常）
 * 				|----NumberFormatException（数据格式异常）
 * 				|----InputMismatchException（输入不匹配）
 * 				|----ArithmaticException（算数异常）
 *
 * 面试题:常见的异常有哪些？举例说明
 *
 */
public class ExceptionTest {

    // ******************以下是编译时异常***************************
    // 在编写代码时就提示异常，在执行javac.exe时就会报错，不会生成.class文件
    @Test
    public void test7() {
//		File file = new File("hello.txt");
//		FileInputStream fis = new FileInputStream(file);
//
//		int data = fis.read();
//		while(data != -1){
//			System.out.print((char)data);
//			data = fis.read();
//		}
//
//		fis.close();
    }

    // ******************以下是运行时异常***************************
    // 在编写代码时不会提示异常，在执行javac.exe时就不会报错，会生成.class文件
    // ArithmeticException（算数异常）
    @Test
    public void test6() {
        int a = 10;
        int b = 0;
        System.out.println(a / b);
    }

    // InputMismatchException（输入不匹配）
    @Test
    public void test5() {
        Scanner scanner = new Scanner(System.in);
        int score = scanner.nextInt();
        System.out.println(score);

        scanner.close();
    }

    // NumberFormatException（数据格式异常）
    @Test
    public void test4() {
        String str = "123";
        str = "abc";
        int num = Integer.parseInt(str);
    }

    // ClassCaseException（类型转换异常）
    @Test
    public void test3() {
        Object obj = new Date();
        String str = (String)obj;
    }

    // ArrayIndexOutOfBoundsException（数组角标越界）
    @Test
    public void test2() {
        // int[] arr = new int[10];
        // System.out.println(arr[10]);// 只有0~9

        // String str = "abc";
        // System.out.println(str.charAt(3));
    }

    // NullPointerException（空指针异常）
    @Test
    public void test1() {
        // int[] arr = null;
        // System.out.println(arr[3]);

        // String str = "abc";
        // str = null;
        // System.out.println(str.charAt(0));
    }
}
